package com.klanpaia.basicGame.Ver;

import java.util.Iterator;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.utils.Array;
import com.klanpaia.basicGame.Moldis.Bala;
import com.klanpaia.basicGame.Moldis.Inimigo;
import com.klanpaia.basicGame.Moldis.Navio;
import com.klanpaia.basicGame.Moldis.Seguir;


public class DesenhandoMundo {

	Mundo mundo;
	SpriteBatch batch;
	Navio navio;
	OrthographicCamera cam;
	Texture navioTextura, balaTexture, seguirTexture;
	float largura, altura;
	ShapeRenderer sr;
	Array<Inimigo> inimigoList;
	Array<Bala> balas;
	Iterator<Bala> biter;
	Bala b;
	Iterator<Inimigo> inimigos;
	Inimigo inimigo;
	
	public DesenhandoMundo(Mundo mundo) {
		super();
		this.mundo = mundo;
		
		mundo.setDesenharMundo(this);
		
		largura = (Gdx.graphics.getWidth() / 40);
		altura = (Gdx.graphics.getHeight() / 40);
		
		cam = new OrthographicCamera();
		cam.setToOrtho(false, largura, altura);
		cam.update();
		
		batch = new SpriteBatch();
		batch.setProjectionMatrix(cam.combined);
		
		navioTextura = new Texture("data/navio.png");
		navioTextura.setFilter(TextureFilter.Linear, TextureFilter.Linear);
		
		seguirTexture = new Texture("data/follower.png");
		seguirTexture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
		
		balaTexture = new Texture("data/bullet.png");
		balaTexture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
		
		//Criando Shapa por cima do navio
		sr = new ShapeRenderer();

	}
	
	public void render(){
		Gdx.gl.glClearColor(0, 0, 0, 1);
		Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
		
		navio = mundo.getNavio();
		inimigoList = mundo.getInimigo();
		balas = mundo.getBala();
		
		cam.position.set(navio.getPosicao().x, navio.getPosicao().y, 0);
		cam.update();
		batch.setProjectionMatrix(cam.combined);
		
		batch.begin();			
		batch.draw(navioTextura, navio.getPosicao().x, navio.getPosicao().y, 
					    navio.getLargura() / 2, navio.getAltura() / 2, navio.getLargura(), navio.getAltura(), 1, 1, 
					    navio.getRotacao(), 0, 0, navioTextura.getWidth(), 
					    navioTextura.getHeight(), false, false);
		
		inimigos = inimigoList.iterator();
		while(inimigos.hasNext()){
			inimigo = inimigos.next();
			batch.draw(seguirTexture, inimigo.getPosicao().x, inimigo.getPosicao().y, 
					inimigo.getLargura()/2, inimigo.getAltura()/2, inimigo.getLargura(), 
					inimigo.getAltura(), 1, 1, inimigo.getRotacao(), 0 , 0, seguirTexture.getWidth(), 
					seguirTexture.getHeight(), false, false);
		}
		
		//Pintar bala por bala 
		biter = balas.iterator();
		while(biter.hasNext()){
			b = biter.next();
			batch.draw(balaTexture, b.getPosicao().x, b.getPosicao().y, 
					b.getLargura()/2, b.getAltura()/2, b.getLargura(), 
					b.getAltura(), 1, 1, b.getRotacao(), 0 , 0, balaTexture.getWidth(), 
					balaTexture.getHeight(), false, false);
		}
		batch.end();
		
		//Isso cria uma shapaPorCima do navio
		sr.setProjectionMatrix(cam.combined);
		sr.begin(ShapeRenderer.ShapeType.Rectangle);
		sr.setColor(Color.CYAN);
		sr.rect(navio.getLimites().x, navio.getLimites().y, navio.getLimites().width, navio.getLimites().height);
		sr.setColor(Color.RED);
		
		inimigos = inimigoList.iterator();
		
		while(inimigos.hasNext()){
			inimigo = inimigos.next();
			sr.rect(inimigo.getLimites().x, inimigo.getLimites().y, inimigo.getLimites().width, inimigo.getLimites().height);
		}
	
		biter = balas.iterator();
		while(biter.hasNext()){
			b = biter.next();
			sr.rect(b.getLimites().x, b.getLimites().y, b.getLimites().width, b.getLimites().height);
		}
		sr.end();
	}
	
	public OrthographicCamera getCamera(){
		
		return cam;
	}
	
	public void dispose(){
		batch.dispose();
		navioTextura.dispose();
		seguirTexture.dispose();
		sr.dispose();
	}
	
}
